package br.com.jmmarca.controller;

//import br.com.jmmarca.model.Cor;
import java.util.ArrayList;
import java.util.List;

import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TabHost.TabSpec;
import android.widget.Toast;
import br.com.jmmarca.dao.impl.CorDAO;
import br.com.jmmarca.model.Cor;
import br.com.jmmarca.util.Utils;

public class CrudCor extends GenericTabActivity {

	private static final String TAG_LOG = "App_crudcor";
	List<Cor> listaCors = new ArrayList<Cor>();
	EditText nome = null;
	EditText codigo = null;

	CorDAO gerenciador;
	Integer idRegistro = null;
	
	ListView lista_ListView;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.cor_main);
		gerenciador = CorDAO.getInstance(getApplicationContext());

		nome = (EditText) findViewById(R.id.txt_cor_nome);
		codigo = (EditText) findViewById(R.id.txt_cor_codigo);

		Button salvar = (Button) findViewById(R.id.btnSalvar);
		salvar.setOnClickListener(onSave);
		Button cancelar = (Button) findViewById(R.id.btnCancelar);
		cancelar.setOnClickListener(onCancel);

		TabSpec descritor = getTabHost().newTabSpec("tag1");
		descritor.setContent(R.id.Cors);
		descritor.setIndicator("Listar",
				getResources().getDrawable(R.drawable.lista));
		getTabHost().addTab(descritor);

		descritor = getTabHost().newTabSpec("tag2");
		descritor.setContent(R.id.detalhesCor);
		descritor.setIndicator("Cadastrar",
				getResources().getDrawable(R.drawable.add));
		getTabHost().addTab(descritor);

		getTabHost().setCurrentTab(0);

		carregaListagem();
		carregaFormulario();
	}


	public void carregaFormulario() {
		Log.w(TAG_LOG, "carregaFormulario");
		if (idRegistro != null) {

			Cor cor = gerenciador.encontrar(idRegistro);
			if (cor != null) {
				nome.setText(cor.getNome());
				codigo.setText(cor.getCodigo());
				
			} else {
				Utils.msg(getApplicationContext(), "Registro não encontrado");
			}
		} else {
			nome.setText("");
			codigo.setText("");
		}
	}

	private void carregaListagem() {
		lista_ListView = (ListView) findViewById(R.id.Cors);

		listaCors = gerenciador.listar();
		ArrayAdapter<Cor> adapter = new ArrayAdapter<Cor>(this,
				android.R.layout.simple_list_item_1, listaCors);

		lista_ListView.setAdapter(adapter);

		lista_ListView.setOnItemClickListener(onListClick);
	}

	private void salvarCadastro() {
		if (nome.getText().toString().equals("")) {
			Toast msg = Toast.makeText(this, "O Campo Nome e requerido!",
					Toast.LENGTH_LONG);
			msg.show();
			return;
		}
		if (codigo.getText().toString().equals("")) {
			Toast msg = Toast.makeText(this, "O Campo Codigo e requerido!",
					Toast.LENGTH_LONG);
			msg.show();
			return;
		}
		
		Cor cor = new Cor(idRegistro);
		cor.setNome(nome.getText().toString());
		cor.setCodigo(codigo.getText().toString());
		

		gerenciador.salvar(cor);
		// Atualiza lista
		listaCors = gerenciador.listar();

		carregaListagem();
		getTabHost().setCurrentTab(0);
		// Registro selecionado
		idRegistro = null;
		carregaFormulario();

		Toast msg = Toast.makeText(this, "Dado Salvo com Sucesso!",
				Toast.LENGTH_LONG);
		msg.show();
	}

	@Override
	public void onDestroy() {
		super.onDestroy();
	}

	private OnItemClickListener onListClick = new OnItemClickListener() {

		@Override
		public void onItemClick(AdapterView<?> parent, View view, int position,
				long id) {
			Cor ev = listaCors.get((int) id);
			idRegistro = ev.getId();
			if (idRegistro != null) {
				carregaFormulario();
			}

			getTabHost().setCurrentTab(1);
		}
	};
	
	private OnClickListener onSave = new OnClickListener() {

		@Override
		public void onClick(View arg0) {
			salvarCadastro();
		}
	};
	private OnClickListener onCancel = new OnClickListener() {

		@Override
		public void onClick(View arg0) {
			idRegistro = null;
			carregaFormulario();
			carregaListagem();
			// Volta para Listagem
			getTabHost().setCurrentTab(0);
		}
	};
	
	
	/**
	 * MENU DA LISTAGEM
	 */
	@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {
		super.onCreateContextMenu(menu, v, menuInfo);
		if (v.getId() == R.id.Cors) {
			AdapterView.AdapterContextMenuInfo acmi = (AdapterContextMenuInfo) menuInfo;
			Cor registroSelecionado = (Cor) lista_ListView
					.getItemAtPosition(acmi.position);
			idRegistro = registroSelecionado.getId();
			MenuInflater inflater = getMenuInflater();
			inflater.inflate(R.menu.menu_listagem, menu);

		}
	}

	@Override
	public boolean onContextItemSelected(MenuItem item) {
		Cor registroSelecionado = gerenciador.encontrar(idRegistro);
		switch (item.getItemId()) {
		case R.id.menu_base_alterar:
			// add stuff here
			idRegistro = registroSelecionado.getId();
			if (idRegistro != null) {
				carregaFormulario();
			}

			getTabHost().setCurrentTab(1);

			return true;
		case R.id.menu_base_remover:
			try {
				gerenciador.remover(registroSelecionado);
				Utils.msg(getApplicationContext(),
						"Registro Removido com Sucesso!");
				carregaListagem();
			} catch (Exception e) {
				Utils.msg(getApplicationContext(),
						"Não foi possivel remover, verifique se não existe dependencias!");
			}
			return true;
		default:
			return super.onContextItemSelected(item);
		}
	}

	
}